package com.huiminpay.merchant.api;

import com.huiminpay.common.cache.domain.BusinessException;
import com.huiminpay.common.cache.domain.PageVO;
import com.huiminpay.merchant.dto.MerchantDTO;
import com.huiminpay.merchant.dto.StaffDTO;
import com.huiminpay.merchant.dto.StoreDTO;

public interface MerchantService {
    /**
     * 根据id查询商户
     * @param merchantId  商户Id
     * @return 商户信息
     */
    MerchantDTO queryMerchantById(Long merchantId);

    /**
     * 新增商户
     * @param merchantDTO  商户信息
     * @return  新添加的商户信息
     */
    MerchantDTO createMerchant(MerchantDTO merchantDTO) throws BusinessException;

    /**
     * 资质申请
     * @param merchantId  商户id
     * @param merchantDTO  商户信息
     * @throws BusinessException
     */
    void applyMerchant(Long merchantId,MerchantDTO merchantDTO) throws BusinessException;

    /**
     * 新增门店
     * @param storeDTO  门店信息
     * @return  新增的门店信息
     * @throws BusinessException
     */
    StoreDTO createStore(StoreDTO storeDTO) throws BusinessException;

    /**
     * 新增员工
     * @param staffDTO  员工信息
     * @return  新增的员工信息
     * @throws BusinessException
     */
    StaffDTO createStaff(StaffDTO staffDTO) throws BusinessException;

    /**
     * 为门店设置管理员
     * @param storeId  门店Id
     * @param staffId  员工Id
     * @throws BusinessException
     */
    void bindStaffToStore(Long storeId,Long staffId) throws BusinessException;

    /**
     * 根据租户id查询商户信息
     * @param tenantId 租户id
     * @return  商户信息
     */
    MerchantDTO queryMerchantByTenantId(Long tenantId);

    /**
     * 分页查询门店列表
     * @param storeDTO  商户ID,门店名称
     * @param pageNum  当前页码
     * @param pageSize  每页条数
     * @param pageSize  每页条数
     * @return
     * @throws BusinessException
     */
    PageVO<StoreDTO> queryStoreByPage(StoreDTO storeDTO, Integer pageNum, Integer pageSize) throws  BusinessException;

    /**
     * 校验门店是否属于该商户
     * @param storeId   门店Id
     * @param merchantId   商户Id
     * @return  true:属于  false: 不属于
     * @throws BusinessException
     */
    Boolean queryStoreInMerchant(Long storeId,Long merchantId) throws BusinessException;
}
